home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / scope / 176-200 / scopedisk191 / chkbook / checkbook.rexx < prev    next >
OS/2 REXX Batch file  |  1995-03-19  |  8KB  |  319 lines

  1. /*
  2. **
  3. ** CHECKBOOK.REXX CheckBook Balancing in AREXX
  4. ** By: James M. Cates (16.03.91)
  5. **
  6. */
  7.  
  8. SIGNAL ON BREAK_C
  9. SIGNAL ON SYNTAX
  10. SIGNAL ON IOERR
  11. TRACE OFF
  12.  
  13. VERSION = '$VERS1.0 (16.03.91)'
  14. AUTHOR  = 'By: James M. Cates'
  15. TRUE    = '1'
  16. FALSE   = '0'
  17. B        = '1B'X'[1m'
  18. D        = '1B'X'[0m'
  19. R        = '1B'X'[33m'
  20. CLS        = '0C'X
  21. LF        = '0A'X
  22. ENT1    = 'Enter ('R'W'D')ithdraw,('R'D'D')eposit,'
  23. ENT2    = '('R'N'D')ew Book,('R'S'D
  24. ENT3    = ')ave,('R'O'D')pen, ('R'K'D')ill or ('R'Q'D')uit'
  25.  
  26. IF ~EXISTS('libs:rexxsupport.library') THEN DO
  27.    SAY 'RexxSupport.library not in Libs: ... Aborting'
  28.    EXIT 10
  29. END
  30.  
  31. IF ~SHOW('L','rexxsupport.library') THEN
  32.    CALL ADDLIB('rexxsupport.library',0,-30)
  33.  
  34. INSTRUCT: 
  35.         SAY
  36.         SAY B||R'CHECKBOOK.REXX 'D||VERSION
  37.         SAY AUTHOR
  38.         SAY
  39.         SAY ENT1||ENT2||ENT3
  40.         SAY 'after prompt W, D, N, S, O, K or Q: '
  41.         SAY
  42.         SAY 'Enter a positive number after the prompt AMOUNT: '
  43.         SAY
  44.         SAY 'Begin by entering a UserName.'
  45.  
  46. ENTER_NAME:
  47.         SAY 'You MUST enter a UserName if you wish to save/retrieve files.'
  48.         SAY 'UserName should be '||B||'ONE'||D||' word '||R||'12 CHAR LIMIT'||D
  49.         SAY
  50.         PullName  = WRITECH('STDOUT',B'USERNAME : 'D)
  51.         PULL UNAME
  52.             IF (LENGTH(UNAME) > 12) THEN DO
  53.             SAY LF||R||'TRY AGAIN...TOO LONG'||D
  54.             CALL ENTER_NAME
  55.             END
  56.         SAY
  57.         SAY 'Now enter a Starting balance.'
  58.         SAY
  59.         PullStart = WRITECH('STDOUT',B'AMOUNT   : 'D)
  60.         PULL STARTBAL
  61.             IF STARTBAL = '' THEN (STARTBAL = '0')
  62.  
  63.     NUMCHECK = '0'
  64.     NUMDEP   = '0'
  65.     CURBAL   = STARTBAL
  66.  
  67. MAIN:
  68.         DO BALANCE = 1
  69.             READT  = READTRANS(TRANTYPE, AMOUNT)
  70.             UPDAT  = UPDATE(TRANTYPE, AMOUNT, CURBAL, NUMCHECK, NUMDEP)
  71.         END
  72.                      
  73. PROCESS:  
  74. NUM         = '0'
  75. STARTBAL = '0'
  76. CURBAL   = '0'
  77. NUMCHECK = '0'
  78. NUMDEP   = '0'
  79. AMOUNT   = '0'
  80. UNAME    = ''
  81. RETURN 0
  82.  
  83. READTRANS:
  84. OPT1      = '['||R||'W'||D||']ithdraw,['||R||'D'||D||']eposit,['||R||'N'||D||']ew User,' 
  85. OPT2      = '['||R||'S'||D||']ave, ['||R||'O'||D||']pen, '
  86. OPT3      = '['||R||'K'||D||']Ill Entry or ['||R||'Q'||D||']uit:'
  87. OPT_PROMT = OPT1||OPT2||OPT3
  88.         SAY 
  89.         PULLTRAN = WRITECH('STDOUT',OPT_PROMT)
  90.         PULL TRANTYPE
  91.         IF TRANTYPE = 'W'|TRANTYPE = 'D' THEN DO
  92.             SAY
  93.             PULLAMT = WRITECH('STDOUT',B'AMOUNT : 'D)
  94.             PULL AMOUNT
  95.         END
  96.         ELSE DO
  97.         NOP
  98.         END
  99. SAY CLS
  100. SAY 
  101. RETURN 0
  102.  
  103. UPDATE: 
  104. SELECT
  105.         WHEN TRANTYPE = 'D' THEN
  106.                 DO
  107.                         CURBAL = (CURBAL + AMOUNT)
  108.                         NUMDEP = (NUMDEP + 1)
  109.                         SAY
  110.                         SAY 'Depositing $ ' AMOUNT 
  111.                         SAY 'Balance of $ ' CURBAL 
  112.                 END
  113.         WHEN TRANTYPE = 'W' THEN
  114.                 DO
  115.                         CURBAL   = (CURBAL - AMOUNT)
  116.                         NUMCHECK = (NUMCHECK + 1)
  117.                         SAY
  118.                         SAY 'Check for  $ ' AMOUNT
  119.                         SAY 'Balance of $ ' CURBAL 
  120.                         if (CURBAL < 0) then
  121.                                 SAY(B'WARNING! You are overdrawn.'D)
  122.                 END
  123.         WHEN TRANTYPE = 'N' THEN
  124.                 DO
  125.                         SIGNAL REPORT
  126.                 END
  127.         WHEN TRANTYPE = 'S' THEN
  128.                 DO
  129.                         NUM = '0'
  130.                         SIGNAL CHECK_SAVE_BAL
  131.                 END
  132.         WHEN TRANTYPE = 'O' THEN
  133.                 DO
  134.                         SIGNAL OPEN_SAVED
  135.                 END
  136.         WHEN TRANTYPE = 'K' THEN
  137.                 DO
  138.                         SIGNAL KILL_ENTRY
  139.                 END
  140.         WHEN TRANTYPE = 'Q' THEN
  141.                 DO
  142.                         SIGNAL ENDIT
  143.                 END
  144.         OTHERWISE
  145.                DO
  146.                SAY B'Invalid transaction type ' TRANTYPE '..transaction ignored'D
  147.                END
  148. END
  149. RETURN 0
  150.  
  151. REPORT:
  152.         SAY CLS||LF 
  153.         SAY 'LAST USER WAS '||B||UNAME||D||'.'
  154.         SAY 'STATS FOR '||B||UNAME||D||':'||LF
  155.         SAY
  156.         SAY 'Starting balance was: $ ' STARTBAL
  157.         SAY 'Final    balance  is: $ ' CURBAL 
  158.         SAY 'Number of checks written : ' NUMCHECK
  159.         SAY 'Number of deposits made  : ' NUMDEP 
  160.         SAY
  161.         SAY 'NEW BOOK REQUESTED....SETTING UP....CLEARING TABLES'
  162.         PROC = PROCESS(STARTBAL, CURBAL, NUMCHECK, NUMDEP)
  163.         INST = INSTRUCT(STARTBAL)
  164. RETURN 0
  165.  
  166. CHECK_SAVE_BAL:
  167. SAY CLS
  168. SAY
  169. SAY 'FILE WILL BE SAVED AS REXX:CheckBook/'||R||'UserName-Number.JulianDate.CBRX'||D
  170. SAY
  171. NUM = NUM
  172. FILENAME  = 'REXX:checkbook/'UNAME'-'NUM'.'||DATE(J)||'.CBRX'
  173. CREAT_DIR = MAKEDIR('REXX:CheckBook')
  174. TEST_NAME = EXISTS(FILENAME)
  175.     IF TEST_NAME THEN DO
  176.     NUM = (NUM + 1)
  177.     FILENAME  = 'REXX:checkbook/'UNAME'-'NUM'.'||DATE(J)||'.CBRX'
  178.     SIGNAL CHECK_SAVE_BAL
  179.     END
  180.     ELSE SIGNAL OPEN_WRITE
  181.  
  182. OPEN_WRITE:
  183. RC_OPEN   = OPEN('SAVE_FILE',FILENAME,'W')
  184.     IF ~RC_OPEN THEN DO
  185.     SAY 'A PROBLEM OCCURED IN OPENING THE SAVE FILE'
  186.     SAY 'RETURNING TO MAIN PROGRAM...'
  187.     CALL MAIN
  188.     END
  189. SIGNAL WRITE_DATA
  190.  
  191. WRITE_DATA:
  192. ASC.1 = '**@@**CHECKBOOK.REXX 'VERSION' JMC'
  193. ASC.2 = '**@@**SAVED.DATA.FILE'
  194. ASC.3 = '**@@**DATE.SAVED+++++++'DATE(E)
  195. ASC.4 = '**@@**FILE.NAME++++++++'UNAME||DATE(J)'.CBRX'
  196. ASC.5 = '**@@**UNAME++++++++++++'UNAME
  197. ASC.6 = '**@@**CURBAL+++++++++++'CURBAL
  198. ASC.7 = '**@@**NUMCHECK+++++++++'NUMCHECK
  199. ASC.8 = '**@@**NUMDEP+++++++++++'NUMDEP
  200. ASC.9 = '**@@**END.DATA'
  201.  
  202.     DO LIN   = 1 TO 8
  203.         HEX.LIN  = C2X(ASC.LIN)
  204.         LPUT_ASC = WRITELN('SAVE_FILE',HEX.LIN)
  205.     END
  206.         PUT_ASC  = WRITECH('SAVE_FILE',ASC.9)
  207. RC_CLOSE  = CLOSE('SAVE_FILE')
  208.     IF ~RC_CLOSE THEN
  209.         SAY 'A PROBLEM OCCURED IN CLOSING '||R||FILENAME||D||' CHECK THE FILE...'
  210.     ELSE
  211.         SAY 'DATA SUCCESSFULLY SAVED AS '||B||FILENAME||D
  212. CALL MAIN 
  213.  
  214. OPEN_SAVED:
  215. SAY 'DIRECTORY LISTING OF '||R||'REXX:CHECKBOOK'||D
  216. SAY
  217. SAY SHOWDIR('REXX:CHECKBOOK','F',LF)
  218. SAY 'ENTER FILENAME '||R||'WITHOUT'||D||' .CBRX SUFFIX'
  219. GET_FILE = WRITECH('STDOUT','OPEN WHICH FILE ? ')
  220. PULL TEST_FILENAME
  221. SAY
  222. D_FILENAME = 'REXX:CHECKBOOK/'||TEST_FILENAME||'.CBRX'
  223. RS_OPEN     = OPEN('DATA_FILE',D_FILENAME,'R')
  224.     IF RS_OPEN = FALSE THEN DO
  225.     SAY 'A PROBLEM OCCURED OPENING 'D_FILENAME
  226.     SAY 'RETURNING TO PROGRAM...'
  227.     CALL OPEN_SAVED
  228.     END
  229.     
  230. TEST_STRING = '2A2A40402A2A434845434B424F4F4B2E52455858'
  231. COMP_STRING = READCH('DATA_FILE',40)
  232.     IF COMP_STRING ~= TEST_STRING THEN DO
  233.     SAY 'THAT IS NOT A VALID CHECKBOOK DATA FILE...SORRY.'
  234.     CALL OPEN_SAVED
  235.     END
  236. SIGNAL GET_DATA
  237.  
  238. GET_DATA:
  239. DO DAT = 1 TO 8 
  240.     DATA.DAT = READLN('DATA_FILE')
  241. END
  242.  
  243. D_DAY     = RIGHT(X2C(DATA.3),8)
  244. UNAME     = STRIP(RIGHT(X2C(DATA.5),12),'L','+')
  245. CURBAL    = STRIP(RIGHT(X2C(DATA.6),12),'L','+')
  246. NUMCHECK  = STRIP(RIGHT(X2C(DATA.7),9),'L','+')
  247. NUMDEP    = STRIP(RIGHT(X2C(DATA.8),10),'L','+')
  248.  
  249. SAY 'DATE DATA FILE SAVED    :  'D_DAY
  250. SAY 'DATA FILE BELONGS TO    :  'UNAME
  251. SAY 'CURRENT BALANCE IS      :  $'CURBAL
  252. SAY 'NUMBER OF CHECKS DRAWN  :  'NUMCHECK
  253. SAY 'NUMBER OF DEPOSITS MADE :  'NUMDEP
  254. SAY
  255. SAY 'FILENAME WILL BE UPDATED IF SAVED AGAIN.'
  256. SAY 'PRESS ANY KEY TO CONTINUE...'
  257. PULL ANYCHAR
  258. SAY
  259. RS_CLOSE = CLOSE('DATA_FILE')
  260. CALL MAIN
  261.  
  262. KILL_ENTRY:
  263. SAY 'DIRECTORY LISTING OF '||R||'REXX:CHECKBOOK'||D
  264. SAY
  265. SAY SHOWDIR('REXX:CHECKBOOK','F',LF)
  266. SAY 'ENTER FILENAME '||R||'WITHOUT'||D||' .CBRX SUFFIX'
  267. GET_FILE = WRITECH('STDOUT','OPEN WHICH FILE ? ')
  268. PULL TEST_KILLFILE
  269. SAY
  270. K_FILENAME = 'REXX:CHECKBOOK/'||TEST_KILLFILE||'.CBRX'
  271. KILLIT       = DELETE(K_FILENAME)
  272.     IF ~KILLIT THEN DO
  273.     SAY 'UNABLE TO DELETE ENTRY '||R||K_FILENAME||D||' !'
  274.     SAY 'LET''S TRY AGAIN'
  275.     SIGNAL KILL_ENTRY
  276.     END
  277. SAY ''||R||K_FILENAME||D||' SUCCESSFULLY DELETED'||LF
  278. KILL_AGAIN = WRITECH('STDOUT','DELETE ANOTHER FILE (Y/N) ? ')
  279. PULL KILL_QUERY
  280.     IF KILL_QUERY = UPPER('y') THEN DO
  281.     CALL KILL_ENTRY
  282.     END
  283. SAY 'RETURNING TO MAIN...'
  284. CALL MAIN
  285.  
  286. BREAK_C:
  287. SAY
  288. SAY B'PROGRAM ABORTED...'D
  289. SAY
  290. EXIT 10
  291.  
  292. SYNTAX:
  293. SAY CLS||LF
  294. SYN1    = 'ERROR CODE 'RC' MEANING ('
  295. SYN2    = R||B||ERRORTEXT(RC)||D
  296. SYN3    = ') WAS RETURNED AFTER LINE '||SIGL||' WAS EXECUTED' 
  297. SAY SYN1||SYN2||SYN3
  298. SAY 
  299. SAY 'EXECUTION HALTED.'
  300. SAY
  301. EXIT 5
  302.  
  303. IOERR:
  304. SAY CLS||LF
  305. SAY 'A I/O ERROR OCCURED...IT WAS NOT FATAL'
  306. SAY 'RETURNING TO MAIN...TRY AGAIN'
  307. SIGNAL MAIN
  308.  
  309. ENDIT:
  310. SAY
  311. SAY 'LAST USER WAS '||B||UNAME||D||'.'
  312. SAY 'STATS FOR '||B||UNAME||D||':'||LF
  313. SAY 'Starting balance was: $ ' STARTBAL
  314. SAY 'Final    balance  is: $ ' CURBAL 
  315. SAY 'Number of checks written: ' NUMCHECK
  316. SAY 'Number of deposits made : ' NUMDEP 
  317. SAY
  318. EXIT 0
  319.